package cardval.application;

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

import com.alibaba.fastjson.JSONObject;

import cardval.util.AccountUtil;
import cardval.util.IDcardValUtil;
import cardval.util.StringUtil;

/**
 * Created by jwang on 2017/4/24.
 */
public class BankInfoCheck {
    private static final Logger logger = Logger.getLogger(BankInfoCheck.class);
    /**
     *
     * @param bankcard
     * @param idcard
     * @param mobile
     * @param realname
     * @return
             */
    public static Map<String, String> Call(String bankcard, String idcard, String mobile, String realname) {
        logger.info(System.getProperty("java.version"));
        Map<String, String> result = new HashMap<>();
        Map<String, String> ret = AccountUtil.account(bankcard, idcard, realname, mobile); //是否传手机号
       /* //进行查看后台返回：
        result.put("code", ret.get("respCode"));
        result.put("desc", ret.get("respDesc"));*/
        //默认的设置返回，根据后面的判断进行覆盖
        result.put("code", "VF");
        result.put("desc", "交易失败");
       logger.info("-----------------------"+ret);
        //统一返回过滤由后续进行
        //这个应该放在前面进行校验的
        if(!StringUtil.isEmpty(idcard)) {
        if(!IDcardValUtil.validate18Idcard(idcard)){
        	result.put("code", "MK");
        	result.put("desc", "身份证校验有误");
        	return result;
        }
        }
            
        //00返回码的修改 一致,验证成功
        if("00".equals(ret.get("respCode"))){        	
        	result.put("code", "00");
            result.put("desc", "一致,验证成功");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //05返回码修改 持卡人信息有误
        if("05".equals(ret.get("respCode"))){
        	result.put("code", "05");
            result.put("desc", "持卡人信息有误");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
      //40处理 未开通无卡支付
        if("40".equals(ret.get("respCode"))){
        	result.put("code", "40");
            result.put("desc", "未开通无卡支付");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        } 
        //02 认证不一致，交易次数超限或操作过频
        if("02".equals(ret.get("respCode"))){
        	result.put("code", "MT");
            result.put("desc", "交易次数超限或操作过频");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //03 认证不一致，发卡行不支持此笔交易
        if("03".equals(ret.get("respCode"))){
        	result.put("code", "03");
            result.put("desc", "认证不一致，发卡行不支持此笔交易");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //14 53处理的更改 无效卡号（无此账户）
        if("14".equals(ret.get("respCode"))||"53".equals(ret.get("respCode"))){
        	result.put("code", "14");
            result.put("desc", "认证不一致,无效卡号");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //06 07 12 13 38 51 55 56 59 61 65 67 认证不一致,认证未通过
        if("06".equals(ret.get("respCode"))||"07".equals(ret.get("respCode"))
        		||"12".equals(ret.get("respCode"))||"51".equals(ret.get("respCode"))||"55".equals(ret.get("respCode"))
        		||"13".equals(ret.get("respCode"))||"38".equals(ret.get("respCode"))
        		||"56".equals(ret.get("respCode"))||"59".equals(ret.get("respCode"))
        		||"61".equals(ret.get("respCode"))||"65".equals(ret.get("respCode"))
        		||"67".equals(ret.get("respCode"))){
        	result.put("code", (ret.get("respCode")));//原来的返回
            result.put("desc", "认证不一致,认证未通过");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        
       
        
      //所有的接口文档上的返回码
        if("MT".equals(ret.get("respCode")) || "IM".equals(ret.get("respCode")) || "IL".equals(ret.get("respCode"))
        	||"II".equals(ret.get("respCode"))||"IE".equals(ret.get("respCode"))||"IC".equals(ret.get("respCode"))
        	||"I4".equals(ret.get("respCode"))||"54".equals(ret.get("respCode"))||"43".equals(ret.get("respCode"))
        	||"42".equals(ret.get("respCode"))||"41".equals(ret.get("respCode"))||"15".equals(ret.get("respCode"))
        	||"04".equals(ret.get("respCode"))
        	){
        	
	        	result.put("code", ret.get("respCode"));
	            result.put("desc", ret.get("respDesc"));
	        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
	        	return result;
        }
        
        //21处理卡未初始化或睡眠卡
        if("21".equals(ret.get("respCode"))){
        	result.put("code", "21");
            result.put("desc", "卡未初始化或睡眠卡");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //28处理
        if("28".equals(ret.get("respCode"))){
        	result.put("code", "28");
            result.put("desc", "认证不一致,当前提交数量过多,请降低提交频率");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //33 认证不一致,此卡已过期
        if("33".equals(ret.get("respCode"))){
        	result.put("code", "33");
            result.put("desc", "认证不一致,此卡已过期");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //34处理 作弊卡、吞卡
        if("34".equals(ret.get("respCode"))){
        	result.put("code", "34");
            result.put("desc", "认证不一致,作弊卡、吞卡");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //35 认证不一致,嫌疑卡
        if("35".equals(ret.get("respCode"))){
        	result.put("code", "35");
            result.put("desc", "认证不一致,嫌疑卡");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //36 认证不一致，受限制的卡
        if("36".equals(ret.get("respCode"))){
        	result.put("code", "36");
            result.put("desc", "认证不一致，受限制的卡");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
       
        //41 挂失卡
        if("41".equals(ret.get("respCode"))){
        	result.put("code", "41");
            result.put("desc", "挂失卡");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //01 45 57 58认证不一致,发卡行不支持此交易
        if("45".equals(ret.get("respCode"))||"01".equals(ret.get("respCode"))){
        	result.put("code", ret.get("respCode"));
            result.put("desc", "认证不一致,发卡行不支持此交易");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //51 
        //57 58 --> 57
        if("57".equals(ret.get("respCode"))||"58".equals(ret.get("respCode"))){
        	result.put("code", "57");
            result.put("desc", "认证不一致,发卡行不支持此交易");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        // 62 认证不一致,受限制的卡
        if("62".equals(ret.get("respCode"))){
        	result.put("code", "62");
            result.put("desc", "认证不一致,受限制的卡");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //75 认证不一致,密码错误次数超限
        if("75".equals(ret.get("respCode"))){
        	result.put("code", "75");
            result.put("desc", "认证不一致,密码错误次数超限");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //90 日期切换正在处理
        if("90".equals(ret.get("respCode"))){
        	result.put("code", "90");
            result.put("desc", "日期切换正在处理");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //91 发卡行或银联不能操作
        if("91".equals(ret.get("respCode"))){
        	result.put("code", "91");
            result.put("desc", "发卡行或银联不能操作");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //92 金融机构不可到达
        if("92".equals(ret.get("respCode"))){
        	result.put("code", "92");
            result.put("desc", "金融机构不可到达");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        // 94 重复交易
        if("94".equals(ret.get("respCode"))){
        	result.put("code", "94");
            result.put("desc", "重复交易");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
       
        //改写响应未应答  96 98 E99 30 68 A0 A7 A8 
        if("E99".equals(ret.get("respCode"))||"96".equals(ret.get("respCode"))
        		||"98".equals(ret.get("respCode"))||"30".equals(ret.get("respCode"))
        		||"68".equals(ret.get("respCode"))||"A0".equals(ret.get("respCode"))
        		||"A7".equals(ret.get("respCode"))||"A8".equals(ret.get("respCode"))) {
        	result.put("code", "VF");
        	result.put("desc", "交易异常");
        	return result;
        }
        
        //HS 验签失败---》交易失败
        if("HS".equals(ret.get("respCode"))){
        	result.put("code", "II");
            result.put("desc", "交易失败");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        //HC--MT  单日次数超限
        if("HC".equals(ret.get("respCode"))){
        	result.put("code", "MT");
            result.put("desc", "单日次数超限");
        	logger.info("通道认证异常 信息如下：" + JSONObject.toJSONString(result));
        	return result;
        }
        
        
       
        return result;
        }
      	
    }
    
    

